package editorsvg.editor.documento;

import editorsvg.editor.formas.Circulo;
import editorsvg.editor.formas.Elipse;
import editorsvg.editor.formas.Linea;
import editorsvg.editor.formas.Polilinea;
import editorsvg.editor.formas.Rectangulo;
import editorsvg.editor.formas.Trayecto;

/**
 *
 * @author Jorge Berjano
 */
public enum PrototipoElemento {
    svg(new Documento()),
    line(new ElementoForma(new Linea())),
    circle(new ElementoForma(new Circulo())),
    ellipse(new ElementoForma(new Elipse())),
    rect(new ElementoForma(new Rectangulo())),
    polyline(new ElementoForma(new Polilinea())),
    path(new ElementoForma(new Trayecto())),
    g(new ElementoGrupo());
    
    private ElementoGrafico elelemtoPrototipo;
    
    PrototipoElemento(ElementoGrafico elemento) {
        this.elelemtoPrototipo = elemento;
    }
    
    public ElementoGrafico getPrototipo() {
        return elelemtoPrototipo;
    }
    
    public static ElementoGrafico crearElemento(String nombre) {
        PrototipoElemento prototipo = null;
        try {
             prototipo = valueOf(nombre.toLowerCase());
        } catch (IllegalArgumentException ex) {
            System.err.println("No de reconoce el elemento " + nombre);
        }
        if (prototipo == null) {
            return new ElementoNoIdentificado();
        }
        
        try {
            ElementoGrafico elemento = (ElementoGrafico) prototipo.getPrototipo().clone();
            return elemento;
        } catch (CloneNotSupportedException ex) {
            System.err.println("El elemento " + nombre + " no puede ser clonado");
            return null;
        }       
    }
}
